package com.example.demo.roads.mapper;


import com.example.demo.roads.ov.res.PoiRes;
import com.example.demo.roads.ov.res.RoadsRes;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 道理数据算法
 *
 * @author yuanzheng
 * @since 2024-09-24
 */
@Mapper
public interface RoadsMapper {

    /**
     * 获取所有路径数据
     *
     * @return 路径数据
     */
    List<RoadsRes> queryRoads();

    /**
     * 获取所有路名称
     *
     * @return 路径数据
     */
    List<RoadsRes> queryRoadsName();

    /**
     * 获取所有街名称
     *
     * @return 路径数据
     */
    List<RoadsRes> queryStreetsName();

    /**
     * 获取路口点位
     *
     * @param roadsRes 参数
     * @return 结果
     */
    List<PoiRes> queryCrossing(RoadsRes roadsRes);

    /**
     * 保存POI数据
     *
     * @param poiRes poi
     * @return 是否入库
     */
    int insertPoi(PoiRes poiRes);

    /**
     * 查询POI数据
     *
     * @param roadsRes 参数
     * @return 结果
     */
    List<PoiRes> queryRoadsPoi(RoadsRes roadsRes);

    /**
     * 查询POI数据
     *
     * @param streetsRes 参数
     * @return 结果
     */
    List<PoiRes> queryStreetsPoi(RoadsRes streetsRes);

    /**
     * 获取中点数据
     *
     * @param geometryA 点A
     * @param geometryB 点B
     * @return 中点数据
     */
    PoiRes queryMiddlePoint(@Param("geometryA") Object geometryA, @Param("geometryB") Object geometryB);

    /**
     * 计算两点之间的距离
     *
     * @param geometryA 点A
     * @param geometryB 点B
     * @return 距离
     */
    double queryDistance(@Param("geometryA") Object geometryA, @Param("geometryB") Object geometryB);
}
